From daf7926d53f6c60f6e5d4116720db70535cbb598 Mon Sep 17 00:00:00 2001 From: Keir Fraser Date: Wed, 9 Sep 2009 16:39:41 +0100 Subject: [PATCH] x86: add an extra check when validating a huge pv L2 entry While get_page_and_type_from_pagenr() (through get_page_from_pagenr()) does the needed mfn_valid() check, get_data_page() doesn't and, it being passed a struct page_info pointer, really expects it's caller(s) to do. Signed-off-by: Jan Beulich Signed-off-by: Keir Fraser --- xen/arch/x86/mm.c | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/xen/arch/x86/mm.c b/xen/arch/x86/mm.c index 579d40b9bc..336883508f 100644 --- a/xen/arch/x86/mm.c +++ b/xen/arch/x86/mm.c @@ -844,14 +844,16 @@ get_page_from_l2e( int writeable = !!(l2e_get_flags(l2e) & _PAGE_RW); do { - rc = get_data_page(mfn_to_page(m), d, writeable); - if ( unlikely(!rc) ) + if ( !mfn_valid(m) || + !get_data_page(mfn_to_page(m), d, writeable) ) { while ( m-- > mfn ) put_data_page(mfn_to_page(m), writeable); return -EINVAL; } } while ( m++ < (mfn + (L1_PAGETABLE_ENTRIES-1)) ); + + rc = 1; } return rc; -- 2.30.2